///@file ElasticMaterial.h
///@brief Declaration of the class representing a linear elastic material
///@author Arnaud Duval
///@version 0.0
///@date 2010/02/26


#ifndef ELASTICMATERIAL_H
#define ELASTICMATERIAL_H

#include "Material.h"

///@class ElasticMaterial
///@brief Class defining a linear elastic material
class ElasticMaterial : public Material
{
	private:
		///@brief Young modulus
		double young;
		///@brief Poisson coefficient
		double poisson;
	public:
		///@brief Default constructor
		ElasticMaterial();
		///@brief Destructor
		~ElasticMaterial();
		///@brief Constructor with arguments
		ElasticMaterial(double, double);
		///@brief Set the value of a given parameter
		void SetParameter(int, double);
		///@brief Compute stess tensor increment from strain tensor tensor increment and initial stress and strain
		StressTensor Dstress(StrainTensor, StressTensor, StrainTensor);
		///@brief Print output
		void PrintOutput(std::ostream &);
        ///@brief Similar to an Abaqus UMAT
        virtual bool UMAT(const Vector&, const Vector&, Vector&, Matrix&);
};

#endif
